import router from './index'
import store from '@/store'
import Cookies from 'js-cookie'
import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getUserInfo, getMyMenusTree } from '@/api/login'
import { getToken } from '@/utils/auth'
// NProgress是配置的进度条
NProgress.configure({ showSpinner: false })

// 路由拦截器
router.beforeEach(async (to, from, next) => {
    NProgress.start()
    // 从cookie中获取token
    const token = getToken();
    if (token) {
        // 如果已经有令牌的用户，就是在正常访问其他页面
        // 就从Vuex里拿到用户信息，然后判断是第一次登录还是登录后访问的其他页面
        const userInfo = store.state.user.name
        console.log(userInfo)
        if (userInfo) {
            // 已登录：正常访问清空下
            if (to.path === '/login') {
                next({ path: '/' })
            }
            // 用户信息存在：正常放行
            next()
            NProgress.done()
        } else {
            try {
                console.log('重新获取')
                // 如果有令牌，但是没有用户信息，证明用户是第一次登录，通过Vuex设置用户信息
                const user = await getUserInfo();
                store.commit('user/SET_NAME', user.data.realname)
                store.commit('user/SET_AVATAR', user.data.avatar)
                const res = await getMyMenusTree();
                store.commit('user/SET_MENU', res.data)
                next({ ...to, replace: true })
            } catch (error) {
                // 如果出错了，移除token，并让用户重新去到登录页面
                console.log('错误提示')
                // await store.dispatch('user/resetToken')
                Message.warning('访问异常，请重新登录！')
                next('/login')
                NProgress.done()
            }
        }
    } else {
        // 没有令牌的情况，导航登录页面
        console.log('3333')
        if (to.path === '/login') {
            // 放行
            next()
        } else {
            // 导航到登录页面
            next('/login')
            Message.warning('身份已过期，请重新登录！')
            NProgress.done()
        }
    }
})

router.afterEach(() => {
    NProgress.done()
})
